package models

import (
	"fmt"
	"gorm.io/gorm"
	"time"
)

// Notification 通知结构体
type Notification struct {
	ID               uint64    `gorm:"column:id;primary_key;auto_increment" json:"id" form:"id"`
	SenderID         uint64    `gorm:"column:sender_id;not_null" json:"sender_id" form:"sender_id"`
	SenderName       string    `gorm:"column:sender_name;type:varchar(255);not_null" json:"sender_name" form:"sender_name"`
	ReceiverID       uint64    `gorm:"column:receiver_id;not_null" json:"receiver_id" form:"receiver_id"`
	ReceiverName     string    `gorm:"column:receiver_name;type:varchar(255);not_null" json:"receiver_name" form:"receiver_name"`
	TeamID           uint64    `gorm:"column:team_id;type:bigint;default:null" json:"team_id" form:"team_id"`             // 新增字段
	TeamName         string    `gorm:"column:team_name;type:varchar(255);default:null" json:"team_name" form:"team_name"` // 新增字段
	NotificationType string    `gorm:"column:notification_type;type:varchar(50);not_null" json:"notification_type" form:"notification_type"`
	Message          string    `gorm:"column:message;type:text;not_null" json:"message" form:"message"`
	IsRead           bool      `gorm:"column:is_read;default:0" json:"is_read" form:"is_read"`
	CreatedAt        time.Time `gorm:"column:created_at;default:CURRENT_TIMESTAMP" json:"created_at" form:"created_at"`
	UpdatedAt        time.Time `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;update_default:CURRENT_TIMESTAMP" json:"updated_at" form:"updated_at"`
}

// TableName 指定结构体对应的数据库表名
func (Notification) TableName() string {
	return "notifications"
}

// InsertInvitationNotification 插入一条邀请通知
//
// Param：
//
//	db ：数据库链接实例
//	senderID ：发送人id
//	senderName ：发送人名称
//	receiverID ：接受人id
//	receiverName ：接收人名称
//	teamID ：团队ID
//	teamName ：团队名
//
// Return：
//
//	error ：错误信息
func InsertInvitationNotification(db *gorm.DB, senderID uint64, senderName string, receiverID uint64, receiverName string, teamID uint64, teamName string) error {
	// 构造通知内容
	message := fmt.Sprintf("%s 邀请 %s 参加团队 %s", senderName, receiverName, teamName)

	// 创建通知对象
	notification := Notification{
		SenderID:         senderID,
		SenderName:       senderName,
		ReceiverID:       receiverID,
		ReceiverName:     receiverName,
		TeamID:           teamID,   // 添加团队ID
		TeamName:         teamName, // 添加团队名称
		NotificationType: "邀请信息",
		Message:          message,
		IsRead:           false,
		CreatedAt:        time.Now(),
		UpdatedAt:        time.Now(),
	}

	// 插入通知
	if err := db.Create(&notification).Error; err != nil {
		return fmt.Errorf("failed to insert notification: %w", err)
	}

	// 打印成功信息（可选）
	//fmt.Printf("Notification inserted successfully: %+v\n", notification)

	return nil
}

//	QueryNotificationsByReceiverID
//
// 描述信息： 查询特定接收者的所有邮件
//
// Param：
//
//	db ：数据库链接实例
//	receiverID ：接收者id
//
// Return：
//
//	[]Notification ：接收者的全部邮件
//	error ：错误信息
func (n Notification) QueryNotificationsByReceiverID(db *gorm.DB, receiverID uint64) ([]Notification, error) {
	var notifications []Notification
	// 使用 Order 函数指定按照 created_at 降序排列
	result := db.Where("receiver_id = ?", receiverID).Order("created_at DESC").Find(&notifications)
	if result.Error != nil {
		return nil, result.Error
	}
	return notifications, nil
}
